############################################
###### Replication Code for Figure A6 ######
########### January 9th, 2025 ##############
############################################

rm(list=ls())

### Script produces Figure A6 and saves it in the `/figures` folder

library(dplyr)
library(fixest)
library(ggplot2)
library(stringr)
library(hbal)
library(gt)
library(modelsummary)
library(ggpubr)

###### Figure A6

df <- readRDS("data/workfile.rds")
w <- readRDS("data/weighted_party_feeling.rds")

df$parfam_nat <- ifelse(df$parfam_name == "Nationalist parties", 1, 0)
df$parfam_left <- ifelse(df$parfam_name == "Socialist/left parties", 1, 0)
df$parfam_con <- ifelse(df$parfam_name == "Conservative parties", 1, 0)

df$out_feeling <- scale(df$mean_outparty_feeling) + scale(df$mean_close_num)

df <- df %>% left_join(w)
df$parfam_name <- as.factor(df$parfam_name)
control_variables <- c('high_pol_interest',
                       "high_edu", "medium_edu", "low_edu",  "dem_age",
                       "parfam_nat", "mean_close_num", "mean_outparty_feeling",
                       "coDE", "coFR", "coES", "coNL", "coUS", "coPL", 
                       "coGR", "coIT", "coSE", "d_affiliated", 
                       "high_income", "medium_income", "low_income")

df$trust_in_opposing_parties = scale(df$trust_in_opposing_parties)

nomiss_df_main <- df %>% 
  select(open_immig, dem_female, dem_country_code, dem_education_level,
         dem_country_code, dem_rural, dem_age, lrscale, parfam_name,
         high_income, medium_income, low_income, political_interest_num,
         high_edu, medium_edu, low_edu, treated, mean_outparty_feeling, 
         high_pol_interest, mean_close_num, d_affiliated, treated,
         political_interest, treated_econ, treated_culture, out_feeling,
         trust_in_opposing_parties) %>% 
  mutate(coDE = ifelse(dem_country_code == "DE", 1, 0), 
         coFR = ifelse(dem_country_code == "FR", 1, 0), 
         coNL = ifelse(dem_country_code == "NL", 1, 0),
         coUS = ifelse(dem_country_code == "US", 1, 0),
         coPL = ifelse(dem_country_code == "PL", 1, 0),
         coGR = ifelse(dem_country_code == "GR", 1, 0), 
         coIT = ifelse(dem_country_code == "IT", 1, 0), 
         coSE = ifelse(dem_country_code == "SE", 1, 0), 
         coGB = ifelse(dem_country_code == "GB", 1, 0), 
         coES = ifelse(dem_country_code == "ES", 1, 0), 
         parfam_liberal = ifelse(parfam_name == "Liberal parties", 1, 0), 
         parfam_other = ifelse(parfam_name == "Other parties", 1, 0), 
         parfam_eco = ifelse(parfam_name == "Ecological parties", 1, 0), 
         parfam_nat = ifelse(parfam_name == "Nationalist parties", 1, 0), 
         parfam_left = ifelse(parfam_name == "Socialist/left parties", 1, 0), 
         parfam_cd = ifelse(parfam_name == "Christian democratic parties", 1, 0), 
         parfam_nonvoters = ifelse(parfam_name == "Non-voters", 1, 0), 
         parfam_sd = ifelse(parfam_name == "Social democratic parties", 1, 0), 
         parfam_con = ifelse(parfam_name == "Conservative parties", 1, 0), 
         parfam_ethnic = ifelse(parfam_name == "Ethnic and regional parties", 1, 0),
         parfam_spec = ifelse(parfam_name == "Special issue party", 1, 0),) %>% 
  .[complete.cases(.), ]

coef_df_main <- data.frame()
country_names <- unique(df$dem_country_code)

for(i in country_names){

  coef_df <- data.frame()
  ########## Culture - No immigration
  nomiss_df <- nomiss_df_main %>% filter(dem_country_code != i)
  
  
  nomiss <- nomiss_df %>% 
    filter((open_immig == 0 & treated_culture == 1) | treated == 0) 
  
  hbal.out <- hbal(Treat = 'treated', 
                   X = control_variables,  
                   Y = 'trust_in_opposing_parties',  data = nomiss)
  m1 = att(hbal.out, dr = FALSE)
  no_discussion_culture <- m1
  
  #modelsummary(m1)
  temp <- data.frame(coef = c(m1$Estimate[1]),
                     se = c(m1$`Std. Error`[1]),
                     name = "No immigration",
                     var = "Trust", 
                     group = "Cultural issues \n condition",
                     country = i)
  
  
  
  coef_df <- rbind.data.frame(coef_df, temp)
  
  
  
  ########## Culture - Immigration
  nomiss <- nomiss_df %>% 
    filter((open_immig == 1 & treated_culture == 1) | treated == 0) 
  
  hbal.out <- hbal(Treat = 'open_immig', 
                   X = control_variables,  
                   Y = 'trust_in_opposing_parties',  data = nomiss)
  m1 = att(hbal.out, dr = FALSE)
  discussion_culture <- m1
  
  temp <- data.frame(coef = c(m1$Estimate[1]),
                     se = c(m1$`Std. Error`[1]),
                     name = "Immigration",
                     var = "Trust", 
                     group = "Cultural issues \n condition",
                     country = i)
  
  
  coef_df <- rbind.data.frame(coef_df, temp)
  
  
  
  ########## Economics - Immigration
  nomiss <- nomiss_df %>% 
    filter((open_immig == 1 & treated_econ == 1) | treated == 0) 
  
  hbal.out <- hbal(Treat = 'open_immig', 
                   X = control_variables,  
                   Y = 'trust_in_opposing_parties',  data = nomiss)
  m1 = att(hbal.out, dr = FALSE)
  discussion_econ <- m1
  
  temp <- data.frame(coef = c(m1$Estimate[1]),
                     se = c(m1$`Std. Error`[1]),
                     name = "Immigration",
                     var = "Trust", 
                     group = "Economic issues \n condition",
                     country = i)
  
  coef_df <- rbind.data.frame(coef_df, temp)
  
  
  ########## Economics - No immigration
  nomiss <- nomiss_df %>% 
    filter((open_immig == 0 & treated_econ == 1) | treated == 0) 
  
  hbal.out <- hbal(Treat = 'treated', 
                   X = control_variables,   
                   Y = 'trust_in_opposing_parties',  data = nomiss)
  m1 = att(hbal.out, dr = FALSE)
  no_discussion_econ <- m1
  
  temp <- data.frame(coef = c(m1$Estimate[1]),
                     se = c(m1$`Std. Error`[1]), 
                     name = "No immigration",
                     var = "Trust", 
                     group = "Economic issues \n condition",
                     country = i)
  
  coef_df <- rbind.data.frame(coef_df, temp)
  coef_df_main <- rbind.data.frame(coef_df_main, coef_df)
  
}



pd <- position_dodge(0.5)

coef_df_main <- coef_df_main %>% filter(var == "Trust")
coef_df1 = coef_df

regs_cult <- ggplot(coef_df_main %>% filter(group == "Cultural issues \n condition"), aes(x = country,  y = coef,  color = name)) + 
  geom_point(position = pd, shape = 21, fill = 'white') + 
  geom_errorbar(aes( ymin = coef - se*1.959964, ymax = coef + se*1.959964), width = 0, position = pd) + 
  geom_errorbar(aes( ymin = coef - se*1.644854, ymax = coef + se*1.644854), width = 0, position = pd, linewidth = 1.2) + 
  geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
  scale_colour_manual(values = c("black", "grey")) +
  xlab("") + 
  ylab("Effect of discussing immigration on out-partisan trust") +
  coord_flip() +
  theme_bw() + 
  ggtitle("a) Cultural issue condition") +
  guides(color=guide_legend(title=""))+ 
  theme(legend.position="bottom")


regs_econ <- ggplot(coef_df_main %>% filter(group == "Economic issues \n condition"), aes(x = country,  y = coef,  color = name)) + 
  geom_point(position = pd, shape = 21, fill = 'white') + 
  geom_errorbar(aes( ymin = coef - se*1.959964, ymax = coef + se*1.959964), width = 0, position = pd) + 
  geom_errorbar(aes( ymin = coef - se*1.644854, ymax = coef + se*1.644854), width = 0, position = pd, linewidth = 1.2) + 
  geom_hline(yintercept = 0, color = "red", linetype = "dashed") +
  scale_colour_manual(values = c("black", "grey")) + 
  xlab("") + 
  ylab("Effect of discussing immigration on out-partisan trust") +
  coord_flip() +
  theme_bw() + 
  ggtitle("b) Economic issue condition") +
  guides(color=guide_legend(title="")) + 
  theme(legend.position="bottom")




ggarrange(regs_cult, regs_econ)
ggsave("figures/FigA6_l1out_balancing_predictors.pdf",
       height = 6, width = 9)
